/*******************************************************
  > Copyright (C) 2024 ==IOT== All rights reserved.
  > File Name: 创建一个子进程.c
  > Author: lv1
  > Website:www.lv1.org
  > Created Time: 2024年08月03日 星期六 11时24分17秒
 ***************************************************/
/*
      用父子进程分别统计一个文本文件中字符：
                   父进程统计其中数字字符个数
                   子进程统计字母字符个数
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dirent.h>
#include <sys/stat.h>//文件属性的操作
#include <sys/types.h>//数据类型定义
#include <unistd.h>//linux下的系统调用，进程操作
#include <fcntl.h> //文件控制,open等
#include <sys/wait.h>
int main(int argc, const char* argv[])
{
	pid_t pid;
	pid = getpid();
	int fd[2] = {0};
	int ret = 0;
	ret = pipe(fd);
	if(ret == -1){
		perror("pipe");
		exit(-1);
	}
	fd[0] = open("../test/cs.txt",O_RDWR);



	//子进程
	pid = fork();
	if(pid == 0){
		int ret = 0;
		char new_buf[100]={0};
		printf("这是子进程：%d\n",getpid());
		close(fd[1]);
		fd[0] = open("../test/cs.txt",O_RDWR);
		ret = read(fd[0],new_buf,sizeof(new_buf));
		if (ret == -1){
			perror("read");
		}
		printf("儿子%s\n",new_buf);
		int count = 0;
		char * q =new_buf;
		while(*q!='\0'){
			printf("%c",*q);
			if(*q >= 'a'&& *q <= 'z' || *q >='A' && *q <= 'Z'){
				count++;
			}
			q++;
		}
		printf("\n字母个数是:%d\n",count);

		exit(0);
	}










	//父进程
	int res = 0;
	char buf[100];
	printf("这是父进程:%d\n",getpid());
	res = read(fd[0],buf,sizeof(buf));
	printf("父亲读取到数组的数据：%s\n",buf);

	//指针遍历数组查看数字出现的个数
	char *p = buf;
	int number = 0;
	printf("父亲指针遍历得到的数据:");
	while(*p!='\0'){
		printf("%c",*p);
		if(*p >= '0'&& *p <= '9'){
			number++;
		}
		p++;
	}
	printf("\n数字个数是%d\n",number);



	close(fd[1]);
	wait(NULL);

















	return 0;
}
